from django.contrib import admin

from sys_book.models import FileInfoModel, BookTypeModel, BookInfoModel


# Register your models here.

# 方法一、将模型直接注册到admin后台
# admin.site.register(user)

# 方法二、自定义类，继承admin.ModelAdmin
@admin.register(FileInfoModel)
class FileInfoModelAdmin(admin.ModelAdmin):
    # 设置显示的字段
    list_display = ('file_id', 'file_name', 'file_type', 'file_url')
    # 设置搜索字段
    search_fields = ('file_name', 'file_type')

    # 设置只读字段,无法修改（写死），动态处理重写get_readonly_fields()
    # readonly_fields = ('file_id', 'file_type', 'file_url')

    # 有些字段不能修改，设置只读字段
    def get_readonly_fields(self, request, obj=None):
        # 编辑现有对象(修改)
        if obj:
            # 返回元组
            return ('file_id', 'file_type', 'file_url')
            # 还可以根据不同角色设置
            # if request.user.is_superuser:
            #     return ()
            # else:
            #     return 'file_id', 'file_type', 'file_url'
        # 否则是新增数据
        return ()


@admin.register(BookTypeModel)
class BookTypeModelAdmin(admin.ModelAdmin):
    # 设置显示的字段
    list_display = ('type_id', 'type_code', 'type_name')
    # 设置搜索字段
    search_fields = ('type_code', 'type_name')

    # 设置只读字段,无法修改（写死），动态处理重写get_readonly_fields()
    # readonly_fields = ('file_id', 'file_type', 'file_url')

    # 有些字段不能修改，设置只读字段
    def get_readonly_fields(self, request, obj=None):
        print(f"get_readonly_fields called with obj: {obj}")
        # 编辑现有对象(修改)
        if obj:
            # 返回元组，否则报错 ()括号可省，后面的逗号不能少
            return 'type_code',
            # 还可以根据不同角色设置
            # if request.user.is_superuser:
            #     return ()
            # else:
            #     return 'file_id', 'file_type', 'file_url'
        # 否则是新增数据
        return ()


@admin.register(BookInfoModel)
class BookInfoModelAdmin(admin.ModelAdmin):
    # 设置显示的字段(外键会默认显示外键模型中 __str__()的返回值，也可以自定义一个方法显示，如下)
    list_display = (
        'book_no', 'book_name', 'book_author', 'create_date', 'create_user', 'update_date', 'update_user',
        'version', 'file_id_new', 'type_id')
    # 修改数据时显示的字段
    fields = ('book_no', 'book_name', 'book_author', 'create_date', 'create_user', 'update_date', 'update_user',
              'version', 'file_id', 'type_info')
    # 设置搜索字段
    search_fields = ('book_no', 'book_name')

    # 自定义方法，显示外键关联字段
    def file_id_new(self, obj):
        return obj.file_id.file_id

    # 字段的显示名称
    file_id_new.short_description = '封面图片id'

    def type_id(self, obj):
        return obj.type_info.type_id
    type_id.short_description = '书籍类型id'

    # 有些字段不能修改，设置只读字段
    def get_readonly_fields(self, request, obj=None):
        print(f"get_readonly_fields called with obj: {obj}")
        # 编辑现有对象(修改)
        if obj:
            # 返回元组，否则报错 ()括号可省，后面的逗号不能少
            return 'book_no', 'file_id', 'create_user'
            # 还可以根据不同角色设置
            # if request.user.is_superuser:
            #     return ()
            # else:
            #     return 'file_id', 'file_type', 'file_url'
        # 否则是新增数据
        return ()
